
. 
. //////////////////
> 
. ** Data processing
. do "$code\Data_prep.do"

. *************************************
. * POOLING TWO WAVES AND INCLUDE ONLY RELEVANT VARIABLES
. *************************************
. 
. *** Keep only relevant variables from the full dataset ***
. 
. * 2017 
. use "$data\mes2017_processed.dta", clear

. * Save data for pooling 2017 and 2020
. keep ruref year score ///
>         empment_2016 age l_opw share_degree_m share_degree_nm family_owned_run family_owned_nonrun foreign_
> owned ///
>         l_emp_2016 l_age sic07 sic2d sic3 sic_section sic_group sic_ps region location q17 profit613_2016_e
> mp_rate profit613_2016_emp_rate_w ///
>         q30_fe_mod_w q30_fe_w dis_1_mod_w q22b_fe_mod_w q22b_fe_tg_mod_w q22b_fe_mod_ave_w  year_ave year_w
> eight ///
>         q23_tg_unc_w q30_unc_w ///
>         q23_tg_w q23_g1_w wq550_g1 wq550_tg q22b_fe_w q22b_fe_tg_w gdp_g_2018 q30_wavg_w ///
>         gdpgoodresp turngoodresp empgoodresp allgoodresp ///
>         l_kovern_1a_imp1 firm_wq550_sd_5yr l_opw_lag1 ///
>         wq550_2016 wq550_2017 wq550_2018 ///
>         q23_g_wavg  q23_g_sd q23_g2 q22b_fe_g2  q30_sd_w  ///
>         score_CI score_KPI score_tar score_emp

. 
.         
. winsor2 wq550_g1 wq550_tg, cuts(1 99) s(_w)

. 
. save "$data\mes2017_for_pooling.dta", replace
file ~\Forecast_final\2. intermediate\mes2017_for_pooling.dta saved

. 
. * 2020
. 
. use "$data\mes2020_processed.dta", clear

. drop score

. 
. 
. //////////
> //////////
> 
. * Skip this section if replicating results in paper version 14
. rename sectionF_2019 sectionF_2019_sub

. rename sectionF_2020 sectionF_2020_sub

. 
. tempfile mes_new

. preserve

. use "~\MES\2020 resupply (All Researchers)\MES20_SRS_dataset.dta", clear

. keep ruref sectionF_19 sectionF_20 sectionB_19 sectionC_19 sectionD_19 sectionE_19 

. rename sectionF_19 sectionF_2019

. rename sectionF_20 sectionF_2020

. rename sectionB_19 score_CI

. rename sectionC_19 score_KPI

. rename sectionD_19 score_tar

. rename sectionE_19 score_emp

. 
. save `mes_new'
file E:\UserTemp\mengxch_1009539\2\ST_576c_000001.tmp saved as .dta format

. restore

. 
. merge 1:1 ruref using `mes_new',gen(_merge_score_upd)

    Result                      Number of obs
    -----------------------------------------
    Not matched                        38,298
        from master                         0  (_merge_score_upd==1)
        from using                     38,298  (_merge_score_upd==2)

    Matched                            12,414  (_merge_score_upd==3)
    -----------------------------------------

. drop if _merge_score_upd != 3
(38,298 observations deleted)

. drop _merge_score_upd

. 
. 
. //////////
> //////////
>                 
. * Save data for pooling 2017 and 2020
. keep ruref year sectionF_2019 sectionF_2020  ///
>         empment age l_opw share_degree_m share_degree_nm family_owned_run family_owned_nonrun foreign_owned
>  ///
>         l_emp l_age sic07 sic2d sic_section sic_group sic_ps region q18 profit613_2019_emp_rate profit613_2
> 019_emp_rate_w ///
>         q34_fe_mod_w q34_fe_w dis_1_mod_w q26_fe_w  q26_fe_tg_w  q26_fe_mod_w q26_tg_unc_w q34_unc_w q26_fe
> _tg_mod_w q26_fe_mod_ave q26_fe_mod_ave_w year_ave year_weight  ///
>         q26_g1 q26_tg q26_fe_w q26_fe_tg_w wq550_g1 wq550_tg q34_wavg gdp_g ///
>         gdpgoodresp turngoodresp empgoodresp allgoodresp ///
>         l_kovern_1a_imp1 firm_wq550_sd_5yr l_opw_2018 ///
>         wq550_2019 wq550_2020 wq550_2021 ///
>         q26_g_wavg q26_g_sd q26_g2 q26_fe_g2  q34_sd ///
>         score_CI score_KPI score_tar score_emp

. 
. 
. winsor2 q26_g1 q26_tg wq550_g1 wq550_tg q34_wavg, cuts(1 99) s(_w)

. rename l_opw_2018 l_opw_lag1    

. 
. save "$data\mes2020_for_pooling.dta", replace
file ~\Forecast_final\2. intermediate\mes2020_for_pooling.dta saved

. 
. //////////
> //////////
> 
. *** Pooling ***
. 
. use "$data\mes2017_for_pooling.dta", clear

. rename empment_2016 empment

. rename l_emp_2016 l_emp

. rename profit613_2016_emp_rate_w profit613_emp_rate_w

. rename profit613_2016_emp_rate profit613_emp_rate

. rename q30_fe_mod_w gdp_fe_w

. rename q30_fe_w gdp_fe_signed_w

. rename dis_1_mod_w gdp_dis_w

. rename q22b_fe_mod_w turn_fe_w

. rename q22b_fe_tg_mod_w turn_fe_tg_w

. rename q22b_fe_mod_ave_w turn_fe_ave_w

. rename q23_tg_unc_w turn_unc_w

. rename q30_unc_w gdp_unc_w

. rename wq550_2016 wq550_y1 

. rename wq550_2017 wq550_y2

. rename wq550_2018 wq550_y3

. rename q23_g1_w turn_g1_w

. rename q23_tg_w turn_tg_w

. rename q22b_fe_w turn_fe_signed_w

. rename q22b_fe_tg_w turn_fe_tg_signed_w

. rename gdp_g_2018 gdp_actual

. rename q30_wavg_w gdp_forecast

. rename q17 multisites

. 
. rename q23_g_wavg turn_g_wavg

. rename q23_g_sd turn_g_sd

. rename q23_g2 turn_g2

. rename q22b_fe_g2 turn_fe_g2

. 
. rename q30_sd_w gdp_g_sd

. 
. 
. 
. destring ruref, replace
ruref: all characters numeric; replaced as double

. drop region

. rename location region, replace

. save "$data\mes2017_for_pooling_1.dta", replace
file ~\Forecast_final\2. intermediate\mes2017_for_pooling_1.dta saved

. 
. use "$data\mes2020_for_pooling.dta", clear

. rename sectionF_2019 score

. rename profit613_2019_emp_rate_w profit613_emp_rate_w

. rename profit613_2019_emp_rate profit613_emp_rate

. rename q34_fe_mod_w gdp_fe_w

. rename q34_fe_w gdp_fe_signed_w

. rename dis_1_mod_w gdp_dis_w

. rename q26_fe_mod_w turn_fe_w

. rename q26_fe_tg_mod_w turn_fe_tg_w

. rename q26_fe_mod_ave_w turn_fe_ave_w

. rename q26_tg_unc_w turn_unc_w

. rename q34_unc_w gdp_unc_w

. rename wq550_2019 wq550_y1 

. rename wq550_2020 wq550_y2

. rename wq550_2021 wq550_y3

. rename q26_g1_w turn_g1_w

. rename q26_tg_w turn_tg_w

. rename q26_fe_w turn_fe_signed_w

. rename q26_fe_tg_w turn_fe_tg_signed_w

. rename gdp_g gdp_actual

. rename q34_wavg_w gdp_forecast

. rename q18 multisites

. 
. 
. * 2017 MES data turnover growth and FE are in percentages. 
. * In line with them, change units in MES2020
. replace turn_fe_w = turn_fe_w * 100
(4,158 real changes made)

. replace turn_fe_ave_w = turn_fe_ave_w * 100
(4,529 real changes made)

. replace turn_fe_tg_w = turn_fe_tg_w * 100
(2,861 real changes made)

. replace turn_unc_w = turn_unc_w +log(100)
(11,797 real changes made)

. 
. 
. 
. rename q26_g_wavg turn_g_wavg

. rename q26_g_sd turn_g_sd

. rename q26_g2 turn_g2

. rename q26_fe_g2 turn_fe_g2

. rename q34_sd gdp_g_sd

. 
. 
. 
. //make signed forecast error consistent: expectation - realised. 
. //need to flip 2020 - turnover; 2020 gdp
. 
. replace gdp_fe_signed_w = -gdp_fe_signed_w 
(12,412 real changes made)

. replace turn_fe_signed_w = - turn_fe_signed_w 
(4,158 real changes made)

. replace turn_fe_tg_signed_w = - turn_fe_tg_signed_w 
(2,861 real changes made)

. replace turn_fe_g2 = - turn_fe_g2
(3,133 real changes made)

. 
. destring sic07, replace
sic07: all characters numeric; replaced as long

. append using "$data\mes2017_for_pooling_1.dta", force
(note: variable sic2d was str2 in the using data, but will be byte now)
(note: variable sic_section was float in the using data, but will be str1 now)
(variable year was int, now double to accommodate using data's values)
(variable empment was long, now double to accommodate using data's values)
(variable wq550_y1 was long, now double to accommodate using data's values)
(variable wq550_y2 was long, now double to accommodate using data's values)
(variable wq550_y3 was long, now double to accommodate using data's values)
(variable age was byte, now float to accommodate using data's values)
(variable sic_group was byte, now float to accommodate using data's values)
(variable sic_ps was byte, now float to accommodate using data's values)
(variable region was byte, now float to accommodate using data's values)
(variable foreign_owned was byte, now float to accommodate using data's values)
(variable gdp_actual was float, now double to accommodate using data's values)
(variable multisites was byte, now float to accommodate using data's values)
(label sic_group_lab already defined)
(label sic_ps_lab already defined)
(label location_lab already defined)

. 
. 
. * convert turnover growth and FE to percentages, in line with gdp
. 
. foreach v of varlist turn_g_wavg turn_g_sd turn_g2 turn_fe_g2 {
  2.         
.         replace `v' =  `v' * 100
  3. }
(19,408 real changes made)
(18,762 real changes made)
(19,408 real changes made)
(6,194 real changes made)

. 
. replace turn_g1_w = turn_g1_w * 100
(19,100 real changes made)

. replace turn_tg_w = turn_tg_w * 100
(19,735 real changes made)

. replace turn_fe_signed_w = turn_fe_signed_w * 100
(8,968 real changes made)

. replace turn_fe_tg_signed_w = turn_fe_tg_signed_w * 100
(6,212 real changes made)

. replace wq550_g1_w = wq550_g1_w * 100
(9,187 real changes made)

. replace wq550_tg_w = wq550_tg_w * 100
(6,267 real changes made)

. 
. 
. 
. 
. sort ruref

. 
. replace sic2d = floor(sic07/1000) if mi(sic2d)
(7,756 real changes made)

. drop sic3

. 
. label var score "Management score"

. label var turn_fe_w "Absolute turnover forecast error (one-year)"

. label var turn_fe_tg_w "Absolute turnover forecast error (two-year)"

. label var turn_fe_ave_w "Absolute turnover forecast error (one-year and two-year averaged)"

. label var gdp_fe_w "Absolute GDP forecast error"

. label var gdp_fe_signed_w "Signed GDP forecast error"

. label var gdp_unc_w "GDP uncertainty (logged) "

. label var turn_unc_w "Turnover uncertainty (logged) "

. 
. label var turn_g1_w "Turnover growth forecast (one-year)"

. label var turn_tg_w "Turnover growth forecast (two-year)"

. label var turn_fe_signed_w "Turnover forecast error (one-year)"

. label var turn_fe_tg_signed_w "Turnover forecast error (two-year)"

. label var wq550_g1_w "Realised turnover growth (one-year)"

. label var wq550_tg_w "Realised turnover growth (two-year)"

. 
. label var  gdp_actual "Realised gdp growth"

. label var  gdp_forecast "Forecast gdp growth"

. 
. * Generate missing value dummies
. foreach var of varlist l_emp l_age family_owned_nonrun family_owned_run foreign_owned share_degree_m share_
> degree_nm multisites {
  2.         gen `var'_miss=0
  3.         replace `var'_miss=1 if missing(`var')
  4. }
(0 real changes made)
(120 real changes made)
(39 real changes made)
(39 real changes made)
(0 real changes made)
(262 real changes made)
(648 real changes made)
(32 real changes made)

. 
. lab var l_opw_lag1 "Log GVA per worker (1 year lagged)"

. 
. * Missing dummies
. 
. gen l_opw_miss = 0

. replace l_opw_miss = 1 if missing(l_opw)
(6,094 real changes made)

. 
. gen l_gdp_fe_w = log(gdp_fe_w)
(2 missing values generated)

. label var l_gdp_fe_w "Absolute GDP forecast error (logged)"

. 
. gen l_turn_fe_ave_w = log(turn_fe_ave_w)
(10,501 missing values generated)

. label var l_turn_fe_ave_w "Absolute turnover forecast error (logged)"

. 
. 
. keep if !mi(score)
(1 observation deleted)

. 
. save "$data\mes_pooled.dta", replace
file ~\Forecast_final\2. intermediate\mes_pooled.dta saved

. 
end of do-file

. 
. ** TABLE 1
. do "${code}\Table1.do"

. local f "legend noabbrev style(tex) cells("count(fmt(0))  mean(fmt(3)) ") lines parentheses label nonumber 
> noobs nogaps"

. 
. *********************************
. * DATA PREP
. *********************************
. 
. ** Survival 2017 - 2022
. use "$data\mes_pooled.dta", clear

. sort ruref

. 
. ** MES 2016 firms
. keep if year == 2016 
(12,413 observations deleted)

. 
. ** Match to ABS2022
. tempfile abs_lu_2022

. preserve

. import sas using "~\Business_datasets_no_postcode\ABS_noPostcode\Universe Files\LU_U
> niv\2022\lu22funiv_labelled_np.sas7bdat", clear
(19 vars, 2,808,725 obs)

. keep ruref 

. sort ruref

. destring ruref, replace
ruref: all characters numeric; replaced as double

. save `abs_lu_2022' 
file E:\UserTemp\mengxch_1009539\2\ST_576c_000001.tmp saved as .dta format

. restore

. 
. merge 1:n ruref using `abs_lu_2022', gen(merge_lu_2022)

    Result                      Number of obs
    -----------------------------------------
    Not matched                     2,761,584
        from master                     1,082  (merge_lu_2022==1)
        from using                  2,760,502  (merge_lu_2022==2)

    Matched                            48,223  (merge_lu_2022==3)
    -----------------------------------------

. keep if year == 2016
(2,760,502 observations deleted)

. sort ruref

. qui by ruref: gen dup = _n

. drop if dup >1
(41,549 observations deleted)

. drop dup

. 
. tab merge_lu_2022

   Matching result from |
                  merge |      Freq.     Percent        Cum.
------------------------+-----------------------------------
        Master only (1) |      1,082       13.95       13.95
            Matched (3) |      6,674       86.05      100.00
------------------------+-----------------------------------
                  Total |      7,756      100.00

. 
. ** Construct data for survival analysis
. gen exit = 0

. replace exit = 1 if merge_lu_2022 == 1
(1,082 real changes made)

. 
. gen survive = 1-exit

. 
. save "$data\exit_mes16.dta"     ,replace
file ~\Forecast_final\2. intermediate\exit_mes16.dta saved

.         
. ** Survival 2020 - 2022
. use "$data\mes_pooled.dta", clear

. 
. ** Match to ABS2022
. sort ruref

. keep if year == 2020
(7,756 observations deleted)

. 
. tempfile abs_lu_2022

. preserve

. import sas using "~\Business_datasets_no_postcode\ABS_noPostcode\Universe Files\LU_U
> niv\2022\lu22funiv_labelled_np.sas7bdat", clear
(19 vars, 2,808,725 obs)

. keep ruref 

. sort ruref

. destring ruref, replace
ruref: all characters numeric; replaced as double

. save `abs_lu_2022' 
file E:\UserTemp\mengxch_1009539\2\ST_576c_000003.tmp saved as .dta format

. restore

. 
. merge 1:n ruref using `abs_lu_2022', gen(merge_lu_2022)

    Result                      Number of obs
    -----------------------------------------
    Not matched                     2,766,171
        from master                       596  (merge_lu_2022==1)
        from using                  2,765,575  (merge_lu_2022==2)

    Matched                            43,150  (merge_lu_2022==3)
    -----------------------------------------

. keep if year == 2020
(2,765,575 observations deleted)

. sort ruref

. qui by ruref: gen dup = _n

. drop if dup >1
(31,333 observations deleted)

. drop dup

. 
. tab merge_lu_2022

   Matching result from |
                  merge |      Freq.     Percent        Cum.
------------------------+-----------------------------------
        Master only (1) |        596        4.80        4.80
            Matched (3) |     11,817       95.20      100.00
------------------------+-----------------------------------
                  Total |     12,413      100.00

. 
. ** Construct data for survival analysis
. gen exit = 0

. replace exit = 1 if merge_lu_2022 == 1
(596 real changes made)

. gen survive = 1-exit

. 
. save "$data\exit_mes20.dta"     ,replace
file ~\Forecast_final\2. intermediate\exit_mes20.dta saved

. 
. ** Two wave pooled
. 
. use "$data\exit_mes20.dta",clear

. append using  "$data\exit_mes16.dta"    
(label _merge already defined)
(label foreign_owned already defined)
(label location_lab already defined)
(label sic_ps_lab already defined)
(label sic_group_lab already defined)
(label q18_lab already defined)

. 
. label var survive "Firm Survival"

. 
. sort ruref

. tempfile abs_ru_2022

. preserve

. import sas using "~\Business_datasets_no_postcode\ABS_noPostcode\Respondent Files\20
> 22\dat22_f_lb_v1_4",case(lower) clear
(413 vars, 47,217 obs)

. keep ruref  empment  wq613 wq450 wq550

. rename empment empment_22 

. rename wq613 wq613_22

. rename wq450 wq450_22

. rename wq550 wq550_22

. 
. sort ruref

. destring ruref, replace
ruref: all characters numeric; replaced as double

. save `abs_ru_2022' 
file E:\UserTemp\mengxch_1009539\2\ST_576c_000005.tmp saved as .dta format

. restore

. 
. merge n:1 ruref using `abs_ru_2022', gen(merge_ru_2022)

    Result                      Number of obs
    -----------------------------------------
    Not matched                        53,175
        from master                    12,494  (merge_ru_2022==1)
        from using                     40,681  (merge_ru_2022==2)

    Matched                             7,675  (merge_ru_2022==3)
    -----------------------------------------

. 
. ** Employment growth rate
. gen growth_emp = (empment_22 - empment) / (0.5 * (empment_22 + empment)) 
(53,175 missing values generated)

. replace growth_emp = -2 if exit == 1
(1,678 real changes made)

. 
. winsor2  growth_emp, cuts(1 99) s(_w1)

. label var growth_emp "Employment Growth Rate"

. label var growth_emp_w1 "Employment Growth Rate (winsorised)"

. 
. 
. ** Profitability growth rate
. ** Profit normalised by turnover
. gen profit_to_22 = (wq613_22 - wq450_22)/wq550_22
(13,514 missing values generated)

. gen profit_to_y1 = (profit613_emp_rate * empment )/ wq550_y1
(46,194 missing values generated)

. gen profit_to_growth = (profit_to_22 - profit_to_y1)/(0.5*(profit_to_22 + profit_to_y1)) 
(54,451 missing values generated)

. 
. winsor2  profit_to_growth, cuts(1 99) s(_w1)

. 
. label var profit_to_growth "Profit/Turnover growth"

. label var profit_to_growth_w1 "Profit/Turnover growth (winsorised)"

. 
. save "$data\data_table1.dta", replace
file ~\Forecast_final\2. intermediate\data_table1.dta saved

. 
. foreach var of varlist l_emp l_age family_owned_nonrun family_owned_run foreign_owned share_degree_m multis
> ites firm_wq550_sd_5yr{
  2.         egen `var'_mean=mean(`var')
  3.         replace `var'=`var'_mean if missing(`var')
  4.         drop `var'_mean
  5. }
(40,681 real changes made)
(40,801 real changes made)
(40,720 real changes made)
(40,720 real changes made)
(40,681 real changes made)
(40,942 real changes made)
(40,712 real changes made)
(55,970 real changes made)

. 
. global controls "i.sic2d i.region  multisites multisites_miss" 

. 
. *********************************
. * (1) SURVIVAL
. *********************************
. 
. est clear

. 
. preserve

. keep if turngoodresp==1
(42,214 observations deleted)

. keep if wq550_y1 !=0 & wq550_y2 != 0 & wq550_y3 != 0 
(128 observations deleted)

. 
. replace turn_fe_ave_w = turn_fe_ave_w * 0.001
(9,025 real changes made)

. 
. eststo : quietly reg survive turn_fe_ave_w l_emp family_owned_nonrun family_owned_run foreign_owned l_age s
> hare_degree_m  $controls  l_emp_miss family_owned_run_miss family_owned_nonrun_miss foreign_owned_miss l_ag
> e_miss share_degree_m_miss i.year, cluster(ruref)
(est1 stored)

. 
. 
. qui estpost sum `e(depvar)' if e(sample)

. est store s

. 
. esttab s ///
> using "$output\Mean_depvar.rtf", replace `f'
(output written to ~\Forecast_final\3. output\Mean_depvar.rtf)

.         
. restore

. 
. preserve

. keep if gdpgoodresp==1
(41,304 observations deleted)

. 
. replace gdp_fe_w = gdp_fe_w * 0.001
(19,546 real changes made)

. 
. eststo : quietly reg survive gdp_fe_w l_emp family_owned_nonrun family_owned_run foreign_owned l_age share_
> degree_m  $controls  l_emp_miss family_owned_run_miss family_owned_nonrun_miss foreign_owned_miss l_age_mis
> s share_degree_m_miss  i.year, cluster(ruref)
(est2 stored)

. 
. qui estpost sum `e(depvar)' if e(sample)

. est store s

. 
. esttab s ///
> using "$output\Mean_depvar.rtf", append `f'
(output written to ~\Forecast_final\3. output\Mean_depvar.rtf)

. 
. restore

. 
. 
. *********************************
. * (2) GROWTH
. *********************************
. 
. // REGRESSIONS
. preserve

. keep if turngoodresp==1
(42,214 observations deleted)

. keep if wq550_y1 !=0 & wq550_y2 != 0 & wq550_y3 != 0 
(128 observations deleted)

. 
. replace turn_fe_ave_w = turn_fe_ave_w * 0.001
(9,025 real changes made)

. 
. eststo : quietly reg growth_emp_w1 turn_fe_ave_w l_emp family_owned_nonrun family_owned_run foreign_owned l
> _age share_degree_m  $controls i.year l_emp_miss family_owned_run_miss family_owned_nonrun_miss foreign_own
> ed_miss l_age_miss share_degree_m_miss , cluster(ruref)
(est3 stored)

. 
. qui estpost sum `e(depvar)' if e(sample)

. est store s

. 
. esttab s ///
> using "$output\Mean_depvar.rtf", append `f'
(output written to ~\Forecast_final\3. output\Mean_depvar.rtf)

.         
. restore

. 
. 
. preserve

. keep if gdpgoodresp==1
(41,304 observations deleted)

. 
. replace gdp_fe_w = gdp_fe_w * 0.001
(19,546 real changes made)

. 
. eststo : quietly reg growth_emp_w1 gdp_fe_w l_emp family_owned_nonrun family_owned_run foreign_owned l_age 
> share_degree_m  $controls  i.year l_emp_miss family_owned_run_miss family_owned_nonrun_miss foreign_owned_m
> iss l_age_miss share_degree_m_miss , cluster(ruref)
(est4 stored)

. 
. qui estpost sum `e(depvar)' if e(sample)

. est store s

. 
. esttab s ///
> using "$output\Mean_depvar.rtf", append `f'
(output written to ~\Forecast_final\3. output\Mean_depvar.rtf)

.         
. restore

. 
. *********************************
. * (3) PROFIT
. *********************************
. 
. preserve

. keep if turngoodresp==1
(42,214 observations deleted)

. keep if wq550_y1 !=0 & wq550_y2 != 0 & wq550_y3 != 0 
(128 observations deleted)

. 
. replace turn_fe_ave_w = turn_fe_ave_w * 0.001
(9,025 real changes made)

. 
. eststo : quietly reg profit_to_growth_w1 turn_fe_ave_w l_emp family_owned_nonrun family_owned_run foreign_o
> wned l_age share_degree_m  $controls i.year l_emp_miss family_owned_run_miss family_owned_nonrun_miss forei
> gn_owned_miss l_age_miss share_degree_m_miss , cluster(ruref)
(est5 stored)

. 
. qui estpost sum `e(depvar)' if e(sample)

. est store s

. 
. esttab s ///
> using "$output\Mean_depvar.rtf", append `f'
(output written to ~\Forecast_final\3. output\Mean_depvar.rtf)

. 
. restore

. 
. 
. preserve

. keep if gdpgoodresp==1
(41,304 observations deleted)

. 
. replace gdp_fe_w = gdp_fe_w * 0.001
(19,546 real changes made)

. 
. eststo : quietly reg profit_to_growth_w1 gdp_fe_w l_emp family_owned_nonrun family_owned_run foreign_owned 
> l_age share_degree_m  $controls i.year l_emp_miss family_owned_run_miss family_owned_nonrun_miss foreign_ow
> ned_miss l_age_miss share_degree_m_miss , cluster(ruref)
(est6 stored)

. 
. qui estpost sum `e(depvar)' if e(sample)

. est store s

. 
. esttab s ///
> using "$output\Mean_depvar.rtf", append `f'
(output written to ~\Forecast_final\3. output\Mean_depvar.rtf)

.                 
. restore

. 
. *********************************
. * OUTPUT
. *********************************
. 
. esttab using "$output\Table1.rtf", replace ///
>         se(3) b(3) r2 star(* 0.1 ** 0.05 *** 0.01) ///
>         onecell nogaps label indicate("Industry Dummies = *sic2d" "Location Dummies = *region"   "Missing D
> ummies = *miss"  "Year Dummies = *year" ) ///
>         title(Table 1: Firm Forecast Errors and Performance ) ///
>         keep(turn_fe_ave_w gdp_fe_w) nobaselevels compress ///
>         addnotes("Absolute turnover forecast error was multiplied by 0.001.")
(tabulating estimates stored by eststo; specify "." to tabulate the active results)
(output written to ~\Forecast_final\3. output\Table1.rtf)

. 
. 
. 
. 
end of do-file

. 
. ** TABLE 2 - 4
. do "${code}\Table2_4.do"

. * TABLE 2 - 4
. 
. use "$data\mes_pooled.dta", clear

. 
. * Macros
. 
. global controls "i.sic2d i.region i.year multisites multisites_miss"

. global controls_2 "l_emp foreign_owned family_owned_nonrun family_owned_run  l_age share_degree_m  l_emp_mi
> ss l_age_miss family_owned_run_miss family_owned_nonrun_miss foreign_owned_miss  share_degree_m_miss "

. 
. local f "legend noabbrev style(tex) cells("count(fmt(0))  mean(fmt(3)) ") lines parentheses label nonumber 
> noobs nogaps"

. 
. ***************************
. ** Table 2 Forecast errors and management
. ***************************
. 
. ** (1) GDP
. gen firm_wq550_sd_5yr_miss = 0

. replace firm_wq550_sd_5yr_miss = 1 if missing(firm_wq550_sd_5yr)
(15,289 real changes made)

. 
. foreach var of varlist l_emp l_age family_owned_nonrun family_owned_run foreign_owned share_degree_m share_
> degree_nm multisites firm_wq550_sd_5yr{
  2.         egen `var'_mean=mean(`var')
  3.         replace `var'=`var'_mean if missing(`var')
  4.         drop `var'_mean
  5. }
(0 real changes made)
(120 real changes made)
(39 real changes made)
(39 real changes made)
(0 real changes made)
(261 real changes made)
(647 real changes made)
(31 real changes made)
(15,289 real changes made)

. 
. preserve

. keep if gdpgoodresp==1
(623 observations deleted)

. 
. est clear

. eststo : quietly reg gdp_fe_w score i.year multisites multisites_miss, cluster(ruref)
(est1 stored)

. eststo : quietly reg gdp_fe_w score $controls , cluster(ruref)
(est2 stored)

. eststo : quietly reg gdp_fe_w score  $controls $controls_2 firm_wq550_sd_5yr firm_wq550_sd_5yr_miss, cluste
> r(ruref)
(est3 stored)

. 
. qui estpost sum `e(depvar)' if e(sample)

. est store s

. esttab s using "$output\Mean_depvar.rtf", append `f'
(output written to ~\Forecast_final\3. output\Mean_depvar.rtf)

.         
. restore

. 
. 
. ** (2) Turnover
. 
. preserve

. keep if turngoodresp==1
(1,533 observations deleted)

. keep if wq550_y1 !=0 & wq550_y2 != 0 & wq550_y3 != 0 
(128 observations deleted)

. 
. eststo : quietly reg turn_fe_ave_w score i.year multisites multisites_miss year_ave [pweight=year_weight] ,
>  cluster(ruref)
(est4 stored)

. eststo : quietly reg turn_fe_ave_w score $controls year_ave [pweight=year_weight], cluster(ruref)
(est5 stored)

. eststo : quietly reg turn_fe_ave_w score  $controls_2 $controls firm_wq550_sd_5yr firm_wq550_sd_5yr_miss ye
> ar_ave [pweight=year_weight], cluster(ruref)
(est6 stored)

. 
. qui estpost sum `e(depvar)' if e(sample)

. est store s

. esttab s using "$output\Mean_depvar.rtf", append `f'
(output written to ~\Forecast_final\3. output\Mean_depvar.rtf)

. 
. restore

. 
. esttab using "$output\Table2.rtf", replace ///
>         se(4) b(3) r2 star(* 0.1 ** 0.05 *** 0.01) ///
>         onecell nogaps label indicate("Industry Dummies = *sic2d" "Location Dummies = *region"   "Missing D
> ummies = *miss" "Year Dummies = *year" ) ///
>         title(Table 2: Forecast Errors in Firms's Estimate of Future Turnover and GDP) ///
>         keep(score l_emp l_age firm_wq550_sd_5yr) nobaselevels compress
(tabulating estimates stored by eststo; specify "." to tabulate the active results)
(output written to ~\Forecast_final\3. output\Table2.rtf)

. 
. 
. ***************************
. ** Table 3 Uncertainty
. ***************************
. est clear

. 
. ** (1) GDP uncertainty **
. preserve

. keep if gdpgoodresp==1
(623 observations deleted)

. 
. eststo : quietly reg gdp_unc score i.year multisites multisites_miss, cluster(ruref)
(est1 stored)

. eststo : quietly reg gdp_unc score $controls, cluster(ruref)
(est2 stored)

. eststo : quietly reg gdp_unc score $controls_2 $controls, cluster(ruref)
(est3 stored)

. 
. qui estpost sum `e(depvar)' if e(sample)

. est store s

. esttab s using "$output\Mean_depvar.rtf", append `f'
(output written to ~\Forecast_final\3. output\Mean_depvar.rtf)

. 
. restore

. 
.         
. * (2) Turnover uncertainty
. preserve

. keep if turngoodresp==1
(1,533 observations deleted)

. keep if wq550_y1 !=0 & wq550_y2 != 0 & wq550_y3 != 0 
(128 observations deleted)

. 
. eststo : quietly reg turn_unc score i.year multisites multisites_miss, cluster(ruref)
(est4 stored)

. eststo : quietly reg turn_unc score $controls, cluster(ruref)
(est5 stored)

. eststo : quietly reg turn_unc score $controls_2 $controls, cluster(ruref)
(est6 stored)

. 
. qui estpost sum `e(depvar)' if e(sample)

. est store s

. esttab s using "$output\Mean_depvar.rtf", append `f'
(output written to ~\Forecast_final\3. output\Mean_depvar.rtf)

. 
. restore

. 
. esttab using "$output\Table3.rtf", replace ///
>         se(4) b(3) r2 star(* 0.1 ** 0.05 *** 0.01) ///
>         onecell nogaps label indicate("Industry Dummies = *sic2d" "Location Dummies = *region"   "Missing D
> ummies = *miss" "Year Dummies = *year" ) ///
>         title(Table 3: Uncertainty Over Forecasts and Management Scores) ///
>         keep(score l_emp l_age) nobaselevels compress
(tabulating estimates stored by eststo; specify "." to tabulate the active results)
(output written to ~\Forecast_final\3. output\Table3.rtf)

.         
.         
. ***************************
. ** Table 4 FE & productivity
. ***************************
. est clear

. 
. ** (1) GDP FE
. preserve

. keep if gdpgoodresp==1
(623 observations deleted)

. eststo : quietly reg gdp_fe_w l_opw   i.year multisites multisites_miss, cluster(ruref)
(est1 stored)

. eststo : quietly reg gdp_fe_w l_opw  score $controls $controls_2, cluster(ruref)
(est2 stored)

. 
. qui estpost sum `e(depvar)' if e(sample)

. est store s

. esttab s using "$output\Mean_depvar.rtf", append `f'
(output written to ~\Forecast_final\3. output\Mean_depvar.rtf)

. 
. restore

. 
. 
. ** (2) Turnover FE
. 
. preserve

. keep if turngoodresp==1
(1,533 observations deleted)

. keep if wq550_y1 !=0 & wq550_y2 != 0 & wq550_y3 != 0 
(128 observations deleted)

. 
. eststo : quietly reg turn_fe_ave_w l_opw  i.year multisites multisites_miss year_ave [pweight=year_weight],
>  cluster(ruref)
(est3 stored)

. eststo : quietly reg turn_fe_ave_w l_opw  score $controls_2 $controls firm_wq550_sd_5yr firm_wq550_sd_5yr_m
> iss year_ave [pweight=year_weight], cluster(ruref)
(est4 stored)

. 
. qui estpost sum `e(depvar)' if e(sample)

. est store s

. esttab s using "$output\Mean_depvar.rtf", append `f'
(output written to ~\Forecast_final\3. output\Mean_depvar.rtf)

.  
. restore

.         
. 
. ** (3) GDP uncertainty 
. preserve

. keep if gdpgoodresp==1
(623 observations deleted)

. 
. eststo : quietly reg gdp_unc l_opw  i.year multisites multisites_miss, cluster(ruref)
(est5 stored)

. eststo : quietly reg gdp_unc l_opw  score $controls_2 $controls, cluster(ruref)
(est6 stored)

. 
. qui estpost sum `e(depvar)' if e(sample)

. est store s

. esttab s using "$output\Mean_depvar.rtf", append `f'
(output written to ~\Forecast_final\3. output\Mean_depvar.rtf)

. 
. restore

. 
. ** (4) Turnover uncertainty
.         
. preserve

. keep if turngoodresp==1
(1,533 observations deleted)

. keep if wq550_y1 !=0 & wq550_y2 != 0 & wq550_y3 != 0 
(128 observations deleted)

. 
. * no dummy
. eststo : quietly reg turn_unc l_opw  i.year multisites multisites_miss, cluster(ruref)
(est7 stored)

. eststo : quietly reg turn_unc l_opw  score $controls_2 $controls, cluster(ruref)
(est8 stored)

. 
. qui estpost sum `e(depvar)' if e(sample)

. est store s

. esttab s using "$output\Mean_depvar.rtf", append `f'
(output written to ~\Forecast_final\3. output\Mean_depvar.rtf)

. 
. restore

. 
. esttab using "$output\Table4.rtf", replace ///
>         se(4) b(3) r2 star(* 0.1 ** 0.05 *** 0.01) ///
>         onecell nogaps label indicate("Industry Dummies = *sic2d" "Location Dummies = *region"   "Missing D
> ummies = *miss" "Year Dummies = *year" ) ///
>         title(Table 4: Forecast Errors and Uncertainty Over Forecasts with Productivity) ///
>         keep(l_opw  score) nobaselevels compress
(tabulating estimates stored by eststo; specify "." to tabulate the active results)
(output written to ~\Forecast_final\3. output\Table4.rtf)

. 
end of do-file

. 
. ** FIGURE 1
. do "${code}\Figure1.do"

. *****************
. ** Figure 1
. *****************
. 
. set graph off

. 
. preserve

. keep if gdpgoodresp==1
(623 observations deleted)

. 
. * (1) Binscatter Management Score vs GDP FE
. binscatter gdp_fe_w score if year, controls(year) ytitle(Absolute GDP forecast error)  ylabel(4.6(0.4)6.2) 
> xtitle(Management score) nquantiles(40) name(F1_gdp_both_score, replace)

. 
. * (2) Binscatter productivity vs GDP FE
. binscatter gdp_fe_w l_opw if year, controls(year)  ytitle(Absolute GDP forecast error) ylabel(4.6(0.4)6.2) 
> xtitle(Log labor productivity)  nquantiles(40) name(F1_gdp_both_lgvapw, replace)

. 
. restore

. **  Turnover FE vs (i) management (ii) labour prod
. * good resp & excl 0
. 
. preserve

. keep if turngoodresp==1
(1,533 observations deleted)

. keep if wq550_y1!=0 & wq550_y2!=0 & wq550_y3!=0
(128 observations deleted)

. 
. * (1) Binscatter Management Score vs sales FE
. 
. binscatter turn_fe_ave_w score , controls(year) ytitle(Absolute turnover forecast error) xtitle(Management 
> score) xlabel(0(0.2)1) ylabel(10(5)40) nquantiles(40) name(F1_turn_both_score, replace)

. 
. 
. * (2) Binscatter productivity vs GDP FE
. binscatter turn_fe_ave_w l_opw , controls(year) ytitle(Absolute turnover forecast error) xtitle(Log labor p
> roductivity) ylabel(10(5)40)  nquantiles(40) name(F1_turn_both_lgvapw, replace)

. 
. set graph on

. graph combine F1_gdp_both_score   F1_gdp_both_lgvapw   F1_turn_both_score  F1_turn_both_lgvapw, cols(2) tit
> le("") graphregion(color(white)) name(F1_combo, replace)

. graph save "${output}\Figure1.gph", replace
file ~\Forecast_final\3. output\Figure1.gph saved

. 
. restore

. 
. 
end of do-file

. 
. ** TABLE A1
. do "${code}\TableA1.do"

. ***************************
. * Table 1 - summary stats
. ***************************
. use "$data\mes_pooled.dta", clear

. 
. qui estpost sum score empment age l_opw share_degree_m share_degree_nm family_owned_run family_owned_nonrun
>  foreign_owned profit613_emp_rate_w multisites firm_wq550_sd_5yr, d

. est store a

. 
. esttab a ///
> using "$output\TableA1.rtf", replace ///
> legend noabbrev style(tex) ///
> cells("count(fmt(0))  mean(fmt(3)) p50(fmt(3)) sd(fmt(3))  ") ///
> lines parentheses ///
> label nonumber noobs nogaps ///
> title(Summary Stats Table )
(output written to ~\Forecast_final\3. output\TableA1.rtf)

. 
. qui estpost sum  turn_fe_w turn_fe_tg_w turn_fe_ave_w turn_unc_w  turn_g1_w wq550_g1_w turn_fe_signed_w tur
> n_tg_w  wq550_tg_w  turn_fe_tg_signed_w if turngoodresp==1 & wq550_y1 !=0 & wq550_y2 != 0 & wq550_y3 != 0, 
> d

. est store b

. 
. esttab b ///
> using "$output\TableA1.rtf", append ///
> legend noabbrev style(tex) ///
> cells("count(fmt(0))  mean(fmt(3)) p50(fmt(3)) sd(fmt(3))  ") ///
> lines parentheses ///
> label nonumber noobs nogaps ///
> title(Summary Stats Table - turnover good response )
(output written to ~\Forecast_final\3. output\TableA1.rtf)

. 
. qui estpost sum  gdp_forecast gdp_actual gdp_fe_signed_w gdp_fe_w   gdp_unc_w if gdpgoodresp==1, d

. est store c

. 
. esttab c ///
> using "$output\TableA1.rtf", append ///
> legend noabbrev style(tex) ///
> cells("count(fmt(0))  mean(fmt(3)) p50(fmt(3)) sd(fmt(3))  ") ///
> lines parentheses ///
> label nonumber noobs nogaps ///
> title(Summary Stats Table - gdp good response)
(output written to ~\Forecast_final\3. output\TableA1.rtf)

. 
. 
. use "$data\data_table1.dta", clear

. qui estpost sum survive growth_emp_w1 profit_to_growth_w1 , d

. est store d

. 
. esttab d ///
> using "$output\TableA1.rtf",  append ///
> legend noabbrev style(tex) ///
> cells("count(fmt(0))  mean(fmt(3)) p50(fmt(3)) sd(fmt(3))  ") ///
> lines parentheses ///
> label nonumber noobs nogaps ///
> title(Summary Stats Table )
(output written to ~\Forecast_final\3. output\TableA1.rtf)

. 
end of do-file

. 
. ** FIGURE A3 - A6
. do "${code}\FigureA3_A6.do"

. ***************************
. * Figure A3
. ***************************
. use "$data\mes_pooled.dta", clear

. set graph off

. 
. ** A3 Signed GDP forecast errors
. 
. preserve

. keep if gdpgoodresp==1
(623 observations deleted)

. 
. hist gdp_fe_signed_w  , bin(20) name (hist_gdp_fe_sgn, replace)
(bin=20, start=-12.5, width=.68886962)

. hist gdp_fe_signed_w  if year == 2016, bin(20) name (hist_gdp_fe_sgn_16, replace)
(bin=20, start=-4.8926077, width=.3085)

. hist gdp_fe_signed_w  if year == 2020, bin(20) name (hist_gdp_fe_sgn_20, replace)
(bin=20, start=-12.5, width=.47)

. 
. hist gdp_fe_signed_w  , freq addlabel bin(20) name (hist_gdp_fe_sgn_c, replace)
(bin=20, start=-12.5, width=.68886962)

. hist gdp_fe_signed_w  if year == 2016, freq addlabel bin(20) name (hist_gdp_fe_sgn_16_c, replace)
(bin=20, start=-4.8926077, width=.3085)

. hist gdp_fe_signed_w  if year == 2020, freq addlabel bin(20) name (hist_gdp_fe_sgn_20_c, replace)
(bin=20, start=-12.5, width=.47)

. 
. restore

. 
. 
. ** A4 Signed turnover forecast errors
. 
. preserve

. keep if turngoodresp == 1
(1,533 observations deleted)

. keep if wq550_y1 !=0 & wq550_y2 != 0 & wq550_y3 != 0 
(128 observations deleted)

. 
. 
. winsor2 turn_fe_signed_w turn_fe_tg_signed_w, cuts(2 98) s(_w3)

. 
. hist turn_fe_signed_w_w3 , bin(20) name (hist_turn1y_fe_sgn, replace)
(bin=20, start=-61.642254, width=6.4266329)

. hist turn_fe_signed_w_w3 , freq addlabel bin(20) name (hist_turn1y_fe_sgn_c, replace)
(bin=20, start=-61.642254, width=6.4266329)

. hist turn_fe_tg_signed_w_w3 , bin(20) name (hist_turn2y_fe_sgn, replace)
(bin=20, start=-81.382248, width=10.499147)

. hist turn_fe_tg_signed_w_w3 , freq addlabel bin(20) name (hist_turn2y_fe_sgn_c, replace)
(bin=20, start=-81.382248, width=10.499147)

. 
. 
. restore

. 
. 
. ** A5 Log employment
. 
. winsor2 l_emp, cuts(1 99) s(_w)

. 
. histogram l_emp_w, bin(20) name(hist_lemp, replace)
(bin=20, start=2.3025851, width=.26936219)

. histogram l_emp_w if year == 2016, bin(20) name(hist_lemp_16, replace)
(bin=20, start=2.3025851, width=.26936219)

. histogram l_emp_w if year == 2020, bin(20) name(hist_lemp_20, replace)
(bin=20, start=2.3025851, width=.26936219)

. 
. 
. 
. ** A6 log sales
. 
. foreach var of varlist wq550_y1 wq550_y2 wq550_y3 {
  2.         
.         gen l_`var' = log(`var')
  3.         winsor2 l_`var', cuts(1 99) s(_w)
  4.         histogram l_`var'_w if year == 2016, bin(20) name(hist_`var'_16, replace)
  5.         histogram l_`var'_w if year == 2020, bin(20) name(hist_`var'_20, replace)
  6.         
. }
(5,513 missing values generated)
(bin=20, start=4.4188404, width=.43605614)
(bin=20, start=4.4188404, width=.43605614)
(10,059 missing values generated)
(bin=20, start=4.5108595, width=.44888806)
(bin=20, start=4.5108595, width=.44888806)
(12,733 missing values generated)
(bin=20, start=4.3438053, width=.47573476)
(bin=20, start=4.3438053, width=.47573476)

. 
. 
. set graph on

. 
. ** A3 Signed GDP forecast errors
. graph combine hist_gdp_fe_sgn hist_gdp_fe_sgn_16 hist_gdp_fe_sgn_20  , cols(2) title("") graphregion(color(
> white)) name(hist_gdp_fe_combo, replace)

. graph save "${output}\Figure_A3.gph", replace
file ~\Forecast_final\3. output\Figure_A3.gph saved

. 
. ** A4 Signed turnover forecast errors
. graph combine hist_turn1y_fe_sgn hist_turn1y_fe_sgn_c hist_turn2y_fe_sgn hist_turn2y_fe_sgn_c  , cols(2) ti
> tle("") graphregion(color(white)) name(hist_turn1y_fe_combo, replace)

. graph save "${output}\Figure_A4.gph", replace
file ~\Forecast_final\3. output\Figure_A4.gph saved

. 
. ** A5 Log employment
. graph combine hist_lemp hist_lemp_16  hist_lemp_20 , cols(2) title("") graphregion(color(white)) name(hist_
> lemp_combo, replace)

. graph save "${output}\Figure_A5.gph", replace
file ~\Forecast_final\3. output\Figure_A5.gph saved

. 
. ** A6 log sales
. graph combine hist_wq550_y1_16 hist_wq550_y2_16 hist_wq550_y3_16 hist_wq550_y1_20 hist_wq550_y2_20 hist_wq5
> 50_y3_20 , cols(2) title("") graphregion(color(white)) name(hist_turn_combo, replace)

. graph save "${output}\Figure_A6.gph", replace
file ~\Forecast_final\3. output\Figure_A6.gph saved

. 
end of do-file

. 
. ** TABLE B1
. do "${code}\TableB1.do"

. ***************************
. * Table B1 - Management scores by broad industry
. ***************************
. * Generate MES specific sizeband variable, which does not include a less than 10 employee band
. gen size_band_MES=.
(20,169 missing values generated)

. replace size_band_MES = 1 if inrange(empment,10,49)
(9,416 real changes made)

. replace size_band_MES = 2 if inrange(empment,50,99)
(4,103 real changes made)

. replace size_band_MES = 3 if inrange(empment,100,249)
(3,039 real changes made)

. replace size_band_MES = 4 if empment>=250
(3,611 real changes made)

. replace size_band_MES = . if empment==.
(0 real changes made)

. 
. cap label define size_band_MES_lab 1 "10-49" 2 "50-99" 3 "100-249" 4 "250+"

. label values size_band_MES size_band_MES_lab

. 
. recode sic_group (2=1 "Manufacturing") ( 3 = 2 "Construction") (4 = 3 "Distribution, hotels & restaurants")
>  (5=4 "Transport, storage, & communication") (6=5 "Business services") (1 7 8 = 6 "Real estate and others")
> , gen(sic_group_new) 
(20169 differences between sic_group and sic_group_new)

. 
. 
. preserve

. 
. collapse (mean) score (percent) share = score (count) ruref , by (sic_group_new size_band_MES)

. export excel using "$output\TableB1.xls", sheet("empment_industry", replace) firstrow(variables) 
file ~\Forecast_final\3. output\TableB1.xls saved

. restore

. 
. preserve

. 
. collapse (mean) score (percent) share = score (count) ruref , by (sic_group_new)

. export excel using "$output\TableB1.xls", sheet("industry", replace) firstrow(variables) 
file ~\Forecast_final\3. output\TableB1.xls saved

. restore

. 
. preserve

. 
. collapse (mean) score (percent) share = score (count) ruref , by ( size_band_MES)

. export excel using "$output\TableB1.xls", sheet("empment", replace) firstrow(variables) 
file ~\Forecast_final\3. output\TableB1.xls saved

. restore

. 
end of do-file

. 
. ** TABLE B2 - B4
. do "${code}\TableB2_B4.do"

. 
. ***************************
. ** Table B2
. ***************************
. use "$data\mes_pooled.dta", clear

. 
. * Macros
. 
. global controls "i.sic2d i.region i.year multisites multisites_miss"

. 
. global controls_2 "l_emp foreign_owned family_owned_nonrun family_owned_run  l_age share_degree_m  l_emp_mi
> ss l_age_miss family_owned_run_miss family_owned_nonrun_miss foreign_owned_miss  share_degree_m_miss "

. 
. preserve

. 
. foreach var of varlist l_emp l_age family_owned_nonrun family_owned_run foreign_owned share_degree_m share_
> degree_nm multisites{
  2.         egen `var'_mean=mean(`var')
  3.         replace `var'=`var'_mean if missing(`var')
  4.         drop `var'_mean
  5. }
(0 real changes made)
(120 real changes made)
(39 real changes made)
(39 real changes made)
(0 real changes made)
(261 real changes made)
(647 real changes made)
(31 real changes made)

. 
. est clear

. eststo : qui reg score l_emp i.year multisites multisites_miss, cluster(ruref)
(est1 stored)

. eststo : qui reg score l_emp l_emp_miss $controls, cluster(ruref)
(est2 stored)

. eststo : qui reg score l_emp family_owned_nonrun family_owned_run foreign_owned $controls  l_emp_miss famil
> y_owned_run_miss family_owned_nonrun_miss foreign_owned_miss, cluster(ruref)
(est3 stored)

. eststo : qui reg score l_emp family_owned_nonrun family_owned_run foreign_owned l_age share_degree_m  $cont
> rols  l_emp_miss family_owned_run_miss family_owned_nonrun_miss foreign_owned_miss l_age_miss share_degree_
> m_miss , cluster(ruref)
(est4 stored)

. 
. 
. * empment_2016<50
. eststo : qui reg score l_emp  family_owned_nonrun family_owned_run foreign_owned l_age share_degree_m   $co
> ntrols l_emp_miss family_owned_run_miss family_owned_nonrun_miss foreign_owned_miss l_age_miss share_degree
> _m_miss  if empment<50, cluster(ruref)
(est5 stored)

. 
. * 49<empment_2016<250
. eststo : qui reg score l_emp  family_owned_nonrun family_owned_run foreign_owned l_age share_degree_m   $co
> ntrols l_emp_miss family_owned_run_miss family_owned_nonrun_miss foreign_owned_miss l_age_miss share_degree
> _m_miss  if empment>49 & empment<250, cluster(ruref)
(est6 stored)

. 
. * empment_2016>249
. eststo : qui reg score l_emp  family_owned_nonrun family_owned_run foreign_owned l_age share_degree_m   $co
> ntrols  l_emp_miss family_owned_run_miss family_owned_nonrun_miss foreign_owned_miss l_age_miss share_degre
> e_m_miss  if empment>249, cluster(ruref)
(est7 stored)

. 
. esttab using "$output\TableB2.rtf", replace ///
>         se(4) b(3) r2 star(* 0.1 ** 0.05 *** 0.01) ///
>         onecell nogaps label indicate("Industry Dummies = *sic2d" "Location Dummies = *region"   "Missing D
> ummies = *miss" "Year Dummies = *year" ) ///
>         title(Table B2: Driver of management score) ///
>         drop(multisites _cons)  nobaselevels compress
(output written to ~\Forecast_final\3. output\TableB2.rtf)

.                 
. restore

. 
. ***************************
. ** Table B3 
. ***************************
. preserve

. 
. foreach var of varlist l_emp l_age family_owned_nonrun family_owned_run foreign_owned share_degree_m share_
> degree_nm multisites l_kovern_1a_imp1 {
  2.         egen `var'_mean=mean(`var')
  3.         replace `var'=`var'_mean if missing(`var')
  4.         drop `var'_mean
  5. }
(0 real changes made)
(120 real changes made)
(39 real changes made)
(39 real changes made)
(0 real changes made)
(261 real changes made)
(647 real changes made)
(31 real changes made)
(9,350 real changes made)

. 
. est clear

. eststo : qui reg l_opw score i.year multisites multisites_miss, cluster(ruref)
(est1 stored)

. 
. eststo : qui reg l_opw score $controls, cluster(ruref)
(est2 stored)

. eststo : qui reg l_opw score l_emp l_kovern_1a_imp1 l_age family_owned_nonrun family_owned_run foreign_owne
> d  family_owned_run_miss family_owned_nonrun_miss foreign_owned_miss l_age_miss $controls, cluster(ruref)
(est3 stored)

. eststo : qui reg l_opw score $controls_2 l_kovern_1a_imp1 $controls, cluster(ruref)
(est4 stored)

. * empment_2016<50
. eststo : qui reg l_opw score $controls_2 l_kovern_1a_imp1 $controls if empment<50, cluster(ruref)
(est5 stored)

. 
. * 49<empment_2016<250
. eststo : qui reg  l_opw score $controls_2 l_kovern_1a_imp1 $controls if empment>49 & empment<250, cluster(r
> uref)
(est6 stored)

. 
. * empment_2016>249
. eststo : qui reg l_opw score $controls_2 l_kovern_1a_imp1 $controls if empment>249, cluster(ruref)
(est7 stored)

. 
. eststo : qui reg profit613_emp_rate_w score $controls_2 l_kovern_1a_imp1 $controls, cluster(ruref)
(est8 stored)

. 
. esttab using "$output\TableB3.rtf", replace ///
>         se(4) b(3) r2 star(* 0.1 ** 0.05 *** 0.01) ///
>         onecell nogaps label indicate("Industry Dummies = *sic2d" "Location Dummies = *region"   "Missing D
> ummies = *miss" "Year Dummies = *year" ) ///
>         title(Table B3: Firm performance) ///
>          drop(multisites _cons) nobaselevels compress
(output written to ~\Forecast_final\3. output\TableB3.rtf)

. 
. 
. restore

. 
. 
.         
. ******************
. * Table B4
. ******************
. 
. preserve

. 
. foreach var of varlist l_emp l_age family_owned_nonrun family_owned_run foreign_owned share_degree_m share_
> degree_nm multisites firm_wq550_sd_5yr l_opw{
  2.         egen `var'_mean=mean(`var')
  3.         replace `var'=`var'_mean if missing(`var')
  4.         drop `var'_mean
  5. }
(0 real changes made)
(120 real changes made)
(39 real changes made)
(39 real changes made)
(0 real changes made)
(261 real changes made)
(647 real changes made)
(31 real changes made)
(15,289 real changes made)
(6,094 real changes made)

. 
. eststo m3: quietly reg gdpgoodresp score i.year multisites multisites_miss, cluster(ruref)

. eststo m4: quietly reg gdpgoodresp score l_opw l_opw_miss $controls $controls_2, cluster(ruref)

. eststo m5: quietly reg turngoodresp score, cluster(ruref)

. eststo m6: quietly reg turngoodresp score l_opw l_opw_miss $controls $controls_2, cluster(ruref)

. eststo m7: quietly reg empgoodresp  score, cluster(ruref)

. eststo m8: quietly reg empgoodresp  score l_opw l_opw_miss $controls $controls_2, cluster(ruref)

. 
. 
. esttab m3 m4 m5 m6 m7 m8 using "$output\TableB4.rtf", replace ///
>         se(4) b(3) r2 star(* 0.1 ** 0.05 *** 0.01) ///
>                 onecell nogaps label indicate("Industry Dummies = *sic2d" "Location Dummies = *region" "Mis
> sing Dummies = *miss" "Year Dummies = *year") ///
>                 title(Table B4: Correlation between good response dummies and control variables) ///
>                 drop(multisites _cons) nobaselevels compress
(output written to ~\Forecast_final\3. output\TableB4.rtf)

. restore

. 
end of do-file

. 
. ** FIGURE B1
. do "${code}\FigureB1.do"

. 
. ******************
. ** Figure B1
. ******************
. 
. twoway (kdensity score if empment<50, lp(solid)) (kdensity score if empment>49 & empment<250, lp(longdash))
>  (kdensity score if empment>249, lp(shortdash)), legend(order(1 "10 to 49" 2 "50 to 249" 3 "250+")) xtitle(
> Management score) ytitle(Density) graphregion(color(white)) name(FB1, replace)

. 
. graph save "${output}\FigureB1.gph", replace
file ~\Forecast_final\3. output\FigureB1.gph saved

. 
end of do-file

. 
. ** TABLE C1 - C3
. do "${code}\TableC1_C3.do"

. ******************
. * Table C1
. ******************
. use "$data\mes_pooled.dta", clear

. 
. * Macros
. 
. global controls "i.sic2d i.region i.year multisites multisites_miss"

. 
. global controls_2 "l_emp foreign_owned family_owned_nonrun family_owned_run  l_age share_degree_m  l_emp_mi
> ss l_age_miss family_owned_run_miss family_owned_nonrun_miss foreign_owned_miss  share_degree_m_miss "

. 
. preserve

. keep if gdpgoodresp==1
(623 observations deleted)

. 
. foreach var of varlist l_emp l_age family_owned_nonrun family_owned_run foreign_owned share_degree_m share_
> degree_nm multisites firm_wq550_sd_5yr l_opw{
  2.         egen `var'_mean=mean(`var')
  3.         replace `var'=`var'_mean if missing(`var')
  4.         drop `var'_mean
  5. }
(0 real changes made)
(103 real changes made)
(33 real changes made)
(33 real changes made)
(0 real changes made)
(212 real changes made)
(540 real changes made)
(26 real changes made)
(14,850 real changes made)
(6,046 real changes made)

. est clear

. eststo m1: quietly reg gdp_forecast score i.year multisites multisites_miss, cluster(ruref)

. eststo m2: quietly reg gdp_forecast score $controls, cluster(ruref)

. eststo m3: quietly reg gdp_forecast score l_emp family_owned_nonrun family_owned_run foreign_owned l_age sh
> are_degree_m  $controls  l_emp_miss family_owned_run_miss family_owned_nonrun_miss foreign_owned_miss l_age
> _miss share_degree_m_miss , cluster(ruref)

. 
. esttab using "$output\TableC1.rtf", replace ///
>         se(4) b(3) r2 star(* 0.1 ** 0.05 *** 0.01) ///
>                 onecell nogaps label indicate("Industry Dummies = *sic2d" "Location Dummies = *region"  "Mi
> ssing Dummies = *miss" "Year Dummies = *year") ///
>                 title(Table C1: Management and GDP Growth Forecasts) ///
>                 drop(multisites _cons) nobaselevels compress
(output written to ~\Forecast_final\3. output\TableC1.rtf)

. restore

. 
. 
. ******************
. * Table C2
. ******************
. 
. preserve

. keep if turngoodresp==1
(1,533 observations deleted)

. keep if wq550_y1 !=0 & wq550_y2 != 0 & wq550_y3 != 0 
(128 observations deleted)

. 
. foreach var of varlist l_emp l_age family_owned_nonrun family_owned_run foreign_owned share_degree_m share_
> degree_nm multisites firm_wq550_sd_5yr l_opw{
  2.         egen `var'_mean=mean(`var')
  3.         replace `var'=`var'_mean if missing(`var')
  4.         drop `var'_mean
  5. }
(0 real changes made)
(88 real changes made)
(24 real changes made)
(24 real changes made)
(0 real changes made)
(181 real changes made)
(500 real changes made)
(24 real changes made)
(13,981 real changes made)
(5,512 real changes made)

. 
. est clear

. eststo m1: quietly reg turn_g1_w score i.year multisites multisites_miss, cluster(ruref)

. eststo m2: quietly reg turn_g1_w score $controls, cluster(ruref)

. eststo m3: quietly reg turn_g1_w score l_emp family_owned_nonrun family_owned_run foreign_owned l_age share
> _degree_m  $controls  l_emp_miss family_owned_run_miss family_owned_nonrun_miss foreign_owned_miss l_age_mi
> ss share_degree_m_miss , cluster(ruref)

. 
. esttab using "$output\TableC2.rtf", replace ///
>         se(4) b(3) r2 star(* 0.1 ** 0.05 *** 0.01) ///
>                 onecell nogaps label indicate("Industry Dummies = *sic2d" "Location Dummies = *region"  "Mi
> ssing Dummies = *miss"  "Year Dummies = *year") ///
>                 title(Table C2: Management and Turnover Growth Forecasts One-year) ///
>                 drop(multisites _cons) nobaselevels compress
(output written to ~\Forecast_final\3. output\TableC2.rtf)

.                 
. restore 

. 
. 
. ******************
. * Table C3
. ******************
. 
. preserve

. keep if turngoodresp==1
(1,533 observations deleted)

. keep if wq550_y1 !=0 & wq550_y2 != 0 & wq550_y3 != 0 
(128 observations deleted)

. 
. foreach var of varlist l_emp l_age family_owned_nonrun family_owned_run foreign_owned share_degree_m share_
> degree_nm multisites firm_wq550_sd_5yr l_opw{
  2.         egen `var'_mean=mean(`var')
  3.         replace `var'=`var'_mean if missing(`var')
  4.         drop `var'_mean
  5. }
(0 real changes made)
(88 real changes made)
(24 real changes made)
(24 real changes made)
(0 real changes made)
(181 real changes made)
(500 real changes made)
(24 real changes made)
(13,981 real changes made)
(5,512 real changes made)

. 
. est clear

. eststo m1: quietly reg turn_tg_w score i.year multisites multisites_miss, cluster(ruref)

. eststo m2: quietly reg turn_tg_w score $controls, cluster(ruref)

. eststo m3: quietly reg turn_tg_w score l_emp family_owned_nonrun family_owned_run foreign_owned l_age share
> _degree_m  $controls  l_emp_miss family_owned_run_miss family_owned_nonrun_miss foreign_owned_miss l_age_mi
> ss share_degree_m_miss , cluster(ruref)

. 
. esttab using "$output\TableC3.rtf", replace ///
>         se(4) b(3) r2 star(* 0.1 ** 0.05 *** 0.01) ///
>                 onecell nogaps label indicate("Industry Dummies = *sic2d" "Location Dummies = *region"  "Mi
> ssing Dummies = *miss"  "Year Dummies = *year") ///
>                 title(Table C3: Management and Turnover Growth Forecasts Two-year) ///
>                 drop(multisites _cons) nobaselevels compress
(output written to ~\Forecast_final\3. output\TableC3.rtf)

.         
. restore 

. 
end of do-file

. 
. ** TABLE D1 D2
. do "${code}\TableD1_D2.do"

. ***************************
. ** Table D1
. ***************************
. 
. use "$data\mes_pooled.dta", clear

. 
. * Macros
. 
. global controls "i.sic2d i.region i.year multisites multisites_miss"

. 
. global controls_2 "l_emp foreign_owned family_owned_nonrun family_owned_run  l_age share_degree_m  l_emp_mi
> ss l_age_miss family_owned_run_miss family_owned_nonrun_miss foreign_owned_miss  share_degree_m_miss "

. 
. gen firm_wq550_sd_5yr_miss = 0

. replace firm_wq550_sd_5yr_miss = 1 if missing(firm_wq550_sd_5yr)
(15,289 real changes made)

. 
. foreach var of varlist l_emp l_age family_owned_nonrun family_owned_run foreign_owned share_degree_m multis
> ites firm_wq550_sd_5yr{
  2.         egen `var'_mean=mean(`var')
  3.         replace `var'=`var'_mean if missing(`var')
  4.         drop `var'_mean
  5. }
(0 real changes made)
(120 real changes made)
(39 real changes made)
(39 real changes made)
(0 real changes made)
(261 real changes made)
(31 real changes made)
(15,289 real changes made)

. 
. 
. * Forecast error squared
. gen gdp_fe_sq_w = gdp_fe_w * gdp_fe_w
(1 missing value generated)

. gen turn_fe_sq_w = turn_fe_ave_w * turn_fe_ave_w
(10,451 missing values generated)

. 
. label var gdp_fe_sq_w "GDP forecast error squared"

. label var turn_fe_sq_w "Turnover forecast error squared"

. 
. global gdp = "gdp_fe_sq_w"

. global turn = "turn_fe_sq_w"

. 
. global fname  "Squared_FE_two_year_avg"

. 
. 
. 
. ** (1) GDP
. preserve

. keep if gdpgoodresp==1
(623 observations deleted)

. 
. est clear

. eststo : quietly reg $gdp score i.year multisites multisites_miss, cluster(ruref)
(est1 stored)

. eststo : quietly reg $gdp score $controls , cluster(ruref)
(est2 stored)

. eststo : quietly reg $gdp score  $controls $controls_2 firm_wq550_sd_5yr firm_wq550_sd_5yr_miss, cluster(ru
> ref)
(est3 stored)

. 
. restore

. 
. 
. ** (2) Turnover
. 
. preserve

. keep if turngoodresp==1
(1,533 observations deleted)

. keep if wq550_y1 !=0 & wq550_y2 != 0 & wq550_y3 != 0 
(128 observations deleted)

. 
. eststo : quietly reg $turn score i.year multisites multisites_miss year_ave [pweight=year_weight] , cluster
> (ruref)
(est4 stored)

. eststo : quietly reg $turn score $controls year_ave [pweight=year_weight], cluster(ruref)
(est5 stored)

. eststo : quietly reg $turn score  $controls_2 $controls firm_wq550_sd_5yr firm_wq550_sd_5yr_miss year_ave [
> pweight=year_weight], cluster(ruref)
(est6 stored)

. 
. 
. esttab using "$output\TableD1.rtf", replace ///
>         se(4) b(3) r2 star(* 0.1 ** 0.05 *** 0.01) ///
>         onecell nogaps label indicate("Industry Dummies = *sic2d" "Location Dummies = *region"   "Missing D
> ummies = *miss" "Year Dummies = *year"  "Year Used for Average =  year_ave" ) ///
>         title(Table D1: Forecast errors (signed) in GDP and turnover ) ///
>         drop(multisites _cons) nobaselevels compress ///
>         addnotes("Forecast error = actual - expected; with weights (used for squared only)")
(output written to ~\Forecast_final\3. output\TableD1.rtf)

.         
. 
. restore

. 
. ***************************
. ** Table D2
. ***************************
. * GDP
. preserve

. keep if gdpgoodresp==1
(623 observations deleted)

. 
. est clear

. eststo : quietly reg $gdp l_opw   i.year multisites multisites_miss, cluster(ruref)
(est1 stored)

. eststo : quietly reg $gdp l_opw  $controls $controls_2, cluster(ruref)
(est2 stored)

. eststo : quietly reg $gdp l_opw  score $controls $controls_2, cluster(ruref)
(est3 stored)

. 
. restore

. 
. 
. * Turnover
. 
. preserve

. keep if turngoodresp==1
(1,533 observations deleted)

. keep if wq550_y1 !=0 & wq550_y2 != 0 & wq550_y3 != 0 
(128 observations deleted)

. 
. eststo : quietly reg $turn l_opw  i.year multisites multisites_miss year_ave [pweight=year_weight], cluster
> (ruref)
(est4 stored)

. eststo : quietly reg $turn l_opw  $controls_2 $controls firm_wq550_sd_5yr firm_wq550_sd_5yr_miss year_ave [
> pweight=year_weight], cluster(ruref)
(est5 stored)

. eststo : quietly reg $turn l_opw  score $controls_2 $controls firm_wq550_sd_5yr firm_wq550_sd_5yr_miss year
> _ave [pweight=year_weight], cluster(ruref)
(est6 stored)

. 
. esttab using "$output\TableD2.rtf", replace ///
>         se(4) b(3) r2 star(* 0.1 ** 0.05 *** 0.01) ///
>         onecell nogaps label indicate("Industry Dummies = *sic2d" "Location Dummies = *region"   "Missing D
> ummies = *miss" "Year Dummies = *year" "Year Used for Average =  year_ave") ///
>         title(Table D2: Forecast errors (signed) and 2018 TFP - No missing dummies for log GVA per worker) 
> ///
>         drop(multisites _cons) nobaselevels compress
(output written to ~\Forecast_final\3. output\TableD2.rtf)

. 
. restore

. 
end of do-file

. 
. ** FIGURE D1
. do "${code}\FigureD1.do"

. ******************
. ** Figure D1
. ******************
. set graph off

. 
. preserve

. keep if turngoodresp==1
(1,533 observations deleted)

. keep if wq550_y1!=0 & wq550_y2!=0 & wq550_y3!=0
(128 observations deleted)

. *keep if q22a!=0 & q22b!=0 & q23_wavg!=0
. 
. * t stat
. reg score turn_fe_ave_w /*[pweight=year_weight], vce(r)*/

      Source |       SS           df       MS      Number of obs   =     9,069
-------------+----------------------------------   F(1, 9067)      =     30.13
       Model |  .984694838         1  .984694838   Prob > F        =    0.0000
    Residual |  296.335076     9,067  .032682814   R-squared       =    0.0033
-------------+----------------------------------   Adj R-squared   =    0.0032
       Total |   297.31977     9,068    .0327878   Root MSE        =    .18078

-------------------------------------------------------------------------------
        score | Coefficient  Std. err.      t    P>|t|     [95% conf. interval]
--------------+----------------------------------------------------------------
turn_fe_ave_w |  -.0003903   .0000711    -5.49   0.000    -.0005297   -.0002509
        _cons |   .6071548   .0022659   267.95   0.000     .6027131    .6115965
-------------------------------------------------------------------------------

. local b = _b[turn_fe_ave_w]

. local se = _se[turn_fe_ave_w]

. local t : di %4.2f _b[turn_fe_ave_w]/_se[turn_fe_ave_w]

. binscatter turn_fe_ave_w score , controls(year)  ytitle(Average absolute turnover forecast error) xtitle(Ma
> nagement score) ylabel(10(5)25) nquantiles(40) text(20 0.65  "t stat = `t'", box bcolor(white) lcolor(black
> ) margin (l+2 r+2 t+2 b+2) width(20)) name(FA1_score, replace)

. 
. count
  18,508

. 
. * Winsor turn_fe_ave_w>50
. keep if turn_fe_ave_w<50
(10,085 observations deleted)

. * t stat
. reg score turn_fe_ave_w /*[pweight=year_weight], vce(r)*/

      Source |       SS           df       MS      Number of obs   =     8,423
-------------+----------------------------------   F(1, 8421)      =     16.64
       Model |   .53799039         1   .53799039   Prob > F        =    0.0000
    Residual |  272.204095     8,421  .032324438   R-squared       =    0.0020
-------------+----------------------------------   Adj R-squared   =    0.0019
       Total |  272.742085     8,422  .032384479   Root MSE        =    .17979

-------------------------------------------------------------------------------
        score | Coefficient  Std. err.      t    P>|t|     [95% conf. interval]
--------------+----------------------------------------------------------------
turn_fe_ave_w |  -.0007758   .0001902    -4.08   0.000    -.0011486   -.0004031
        _cons |   .6111436   .0028989   210.82   0.000     .6054611    .6168261
-------------------------------------------------------------------------------

. local b = _b[turn_fe_ave_w]

. local se = _se[turn_fe_ave_w]

. local t : di %4.2f _b[turn_fe_ave_w]/_se[turn_fe_ave_w]

. binscatter turn_fe_ave_w score , controls(year)  ytitle(Average absolute turnover forecast error) xtitle(Ma
> nagement score) ylabel(8(2)14) nquantiles(40) text(14 0.65  "t stat = `t'", box  bcolor(white) lcolor(black
> ) margin (l+2 r+2 t+2 b+2) width(20)) name(FA1_Cut50_score, replace) graphregion(color(white) lcolor(white)
> )

. count
  8,423

. 
. * Winsor turn_fe_ave_w>25
. keep if turn_fe_ave_w<25
(938 observations deleted)

. * t stat
. reg score turn_fe_ave_w /*[pweight=year_weight], vce(r)*/

      Source |       SS           df       MS      Number of obs   =     7,485
-------------+----------------------------------   F(1, 7483)      =      1.14
       Model |  .036367266         1  .036367266   Prob > F        =    0.2848
    Residual |  237.820601     7,483  .031781451   R-squared       =    0.0002
-------------+----------------------------------   Adj R-squared   =    0.0000
       Total |  237.856969     7,484  .031782064   Root MSE        =    .17827

-------------------------------------------------------------------------------
        score | Coefficient  Std. err.      t    P>|t|     [95% conf. interval]
--------------+----------------------------------------------------------------
turn_fe_ave_w |  -.0003493   .0003266    -1.07   0.285    -.0009895    .0002908
        _cons |   .6080048   .0034243   177.56   0.000     .6012923    .6147173
-------------------------------------------------------------------------------

. local b = _b[turn_fe_ave_w]

. local se = _se[turn_fe_ave_w]

. local t : di %4.2f _b[turn_fe_ave_w]/_se[turn_fe_ave_w]

. binscatter turn_fe_ave_w score , controls(year)  ytitle(Average absolute turnover forecast error) xtitle(Ma
> nagement score) ylabel(7(1)10) nquantiles(40) text(10 0.65  "t stat = `t'", box  bcolor(white) lcolor(black
> ) margin (l+2 r+2 t+2 b+2) width(20)) name(FA1_Cut25_score, replace) graphregion(color(white) lcolor(white)
> )

. count
  7,485

. 
. restore

. 
. set graph on

. 
. graph combine FA1_Cut50_score FA1_Cut25_score, cols(2) title("") graphregion(color(white)) name(FA1_combo, 
> replace) note(Note: We trimed those firms with average absolute turnover forecast error greater than 50 (le
> ft) and 25 (right).)     

. graph save "${output}\FigureD1.gph", replace
file ~\Forecast_final\3. output\FigureD1.gph saved

. 
end of do-file

. 
. ** FIGURE E1 - E3
. do "${code}\FigureE1_E3.do"

. ******************
. ** Figure E1
. ******************
. set graph off

. ** Turnover
. preserve

. keep if turngoodresp==1
(1,533 observations deleted)

. keep if wq550_y1!=0 & wq550_y2!=0 & wq550_y3!=0
(128 observations deleted)

. 
. ** log-log
. 
. binscatter turn_unc_w l_turn_fe_ave_w if year==2016, title(MES 2017, size(medium)) xtitle(Log absolute turn
> over forecast error, size(small)) ytitle(Log turnover uncertainty, size(small)) xlabel(-4(2)6) ylabel(1(0.2
> )2.4)   nbins(40) name(FE1_turn_16, replace)
NOTE: legacy option nbins() has been renamed nquantiles(), and is supported only for backward compatibility.

. 
. binscatter turn_unc_w l_turn_fe_ave_w if year==2020, title(MES 2020, size(medium)) xtitle(Log absolute turn
> over forecast error, size(small)) ytitle(Log turnover uncertainty, size(small))  xlabel(-4(2)6) ylabel(1(0.
> 2)2.4)  nbins(40) name(FE1_turn_20, replace)
NOTE: legacy option nbins() has been renamed nquantiles(), and is supported only for backward compatibility.

. 
. restore

. 
. ** GDP
. preserve

. keep if gdpgoodresp==1
(623 observations deleted)

. 
. ** log-log
. binscatter gdp_unc_w l_gdp_fe_w if year==2016, title(MES 2017, size(medium)) xtitle(Log GDP forecast error,
>  size(small)) ytitle(Log GDP uncertainty, size(small)) xlabel(-3(1)2.5) ylabel(0(0.2)0.8)   nbins(40) name(
> FE1_GDP_16, replace)
NOTE: legacy option nbins() has been renamed nquantiles(), and is supported only for backward compatibility.
warning: nquantiles(40) was specified, but only 36 were generated. see help file under nquantiles() for expla
> nation.

. 
. binscatter gdp_unc_w l_gdp_fe_w if year==2020, title(MES 2020, size(medium)) xtitle(Log GDP forecast error,
>  size(small)) ytitle(Log GDP uncertainty, size(small)) xlabel(-3(1)2.5) ylabel(0(0.2)0.8)  nbins(40) name(F
> E1_GDP_20, replace)
NOTE: legacy option nbins() has been renamed nquantiles(), and is supported only for backward compatibility.
warning: nquantiles(40) was specified, but only 38 were generated. see help file under nquantiles() for expla
> nation.

. 
. restore

. 
. 
. ** GDP
. preserve

. keep if gdpgoodresp==1
(623 observations deleted)

. keep if turngoodresp==1
(1,148 observations deleted)

. keep if wq550_y1!=0 & wq550_y2!=0 & wq550_y3!=0
(127 observations deleted)

. *keep if q22a!=0 & q22b!=0 & q23_wavg!=0
. 
. ** log-log
. binscatter gdp_unc_w turn_unc_w if year==2016, title(MES 2017, size(medium)) xtitle(Log turnover uncertaint
> y, size(small)) ytitle(Log GDP uncertainty, size(small)) ylabel(0(0.2)0.8) xlabel(-2(2)4) nbins(40) name(FE
> 1_both_16, replace)
NOTE: legacy option nbins() has been renamed nquantiles(), and is supported only for backward compatibility.

. 
. binscatter gdp_unc_w turn_unc_w if year==2020, title(MES 2020, size(medium)) xtitle(Log turnover uncertaint
> y, size(small)) ytitle(Log GDP uncertainty, size(small)) ylabel(0(0.2)0.8) xlabel(-2(2)4) nbins(40) name(FE
> 1_both_20, replace)
NOTE: legacy option nbins() has been renamed nquantiles(), and is supported only for backward compatibility.

. restore

. 
. set graph on

. graph combine  FE1_GDP_16 FE1_GDP_20 FE1_turn_16 FE1_turn_20 FE1_both_16 FE1_both_20, cols(2) title("") gra
> phregion(color(white)) name(FE1_combo, replace)

. graph save "${output}\FigureE1.gph", replace
file ~\Forecast_final\3. output\FigureE1.gph saved

. 
. ******************
. ** Figure E2
. ******************
. set graph off

. 
. preserve

. keep if gdpgoodresp==1
(623 observations deleted)

. 
. * (1) Binscatter Management Score vs GDP FE
. 
. binscatter gdp_fe_w score if year==2016, title(MES 2017, size(medium)) ytitle(Absolute GDP forecast error) 
> xtitle(Management score) nquantiles(40) name(FE2_16_score, replace)

. 
. binscatter gdp_fe_w score if year==2020, title(MES 2020, size(medium)) ytitle(Absolute GDP forecast error) 
> xtitle(Management score) nquantiles(40) name(FE2_20_score, replace)

. 
. 
. * (2) Binscatter productivity vs GDP FE
. 
. binscatter gdp_fe_w l_opw if year==2016, title(MES 2017, size(medium)) ytitle(Absolute GDP forecast error) 
> xtitle(Log labor productivity) nquantiles(40) name(FE2_16_lgvapw, replace)

. 
. binscatter gdp_fe_w l_opw if year==2020, title(MES 2020, size(medium)) ytitle(Absolute GDP forecast error) 
> xtitle(Log labor productivity) nquantiles(40) name(FE2_20_lgvapw, replace)

. 
. 
. * (3) Binscatter log profit vs GDP FE
. binscatter gdp_fe_w profit613_emp_rate_w if year== 2016, title(MES 2017, size(medium)) ytitle(Absolute GDP 
> forecast error) xtitle(Log profit) nquantiles(40) name(FE2_16_lppw, replace)

. 
. binscatter gdp_fe_w profit613_emp_rate_w if year==2020, title(MES 2020, size(medium)) ytitle(Absolute GDP f
> orecast error) xtitle(Log profit) nquantiles(40) name(FE2_20_lppw, replace)

. 
. set graph on

. graph combine FE2_16_score FE2_20_score FE2_16_lgvapw FE2_20_lgvapw FE2_16_lppw FE2_20_lppw, cols(2) title(
> "") graphregion(color(white)) name(FE2_combo, replace)

. graph save "${output}\FigureE2.gph", replace
file ~\Forecast_final\3. output\FigureE2.gph saved

. 
. restore

. 
. ******************
. ** Figure E3
. ******************
. set graph off

. 
. preserve

. keep if turngoodresp==1
(1,533 observations deleted)

. keep if wq550_y1!=0 & wq550_y2!=0 & wq550_y3!=0
(128 observations deleted)

. 
. * (1) Binscatter Management Score vs sales FE
. 
. binscatter turn_fe_ave_w score if year==2016, title(MES 2017, size(medium)) ytitle(Absolute turnover foreca
> st error) xtitle(Management score) xlabel(0(0.2)1) ylabel(10(10)50)  nquantiles(40) name(FE3_16_score, repl
> ace)

. 
. binscatter turn_fe_ave_w score if year==2020, title(MES 2020, size(medium)) ytitle(Absolute turnover foreca
> st error) xtitle(Management score) xlabel(0(0.2)1) ylabel(10(10)50)  nquantiles(40) name(FE3_20_score, repl
> ace)

. 
. * (2) Binscatter productivity vs GDP FE
. 
. binscatter turn_fe_ave_w l_opw if year==2016, title(MES 2017, size(medium)) ytitle(Absolute turnover foreca
> st error) xtitle(Log labor productivity) ylabel(10(10)50) nquantiles(40) name(FE3_16_lgvapw, replace)

. 
. binscatter turn_fe_ave_w l_opw if year==2020, title(MES 2020, size(medium)) ytitle(Absolute turnover foreca
> st error) xtitle(Log labor productivity) xlabel(0(2)6) ylabel(10(10)50) nquantiles(40) name(FE3_20_lgvapw, 
> replace)

. 
. 
. * (3) Binscatter log profit vs GDP FE
. 
. binscatter turn_fe_ave_w profit613_emp_rate_w if year==2016, title(MES 2017, size(medium)) ytitle(Absolute 
> turnover forecast error) xtitle(Log profit) xlabel(-100(100)400) ylabel(10(10)50) nquantiles(40) name(FE3_1
> 6_lppw, replace)

. 
. binscatter turn_fe_ave_w profit613_emp_rate_w if year==2020, title(MES 2020, size(medium)) ytitle(Absolute 
> turnover forecast error) xtitle(Log profit) xlabel(-100(100)400) ylabel(10(10)50) nquantiles(40) name(FE3_2
> 0_lppw, replace)

. 
. set graph on

. graph combine  FE3_16_score FE3_20_score  FE3_16_lgvapw FE3_20_lgvapw  FE3_16_lppw FE3_20_lppw, cols(2) tit
> le("") graphregion(color(white)) name(FE3_combo, replace)

. graph save "${output}\FigureE3.gph", replace
file ~\Forecast_final\3. output\FigureE3.gph saved

. 
. restore

. 
end of do-file

. 
. 
. log close
      name:  <unnamed>
       log:  ~\Forecast_final\3. output\Forecast_paper.log
  log type:  text
 closed on:  24 Nov 2025, 11:19:22
-------------------------------------------------------------------------------------------------------------
